package cl.agrosuper.dao
{
	import cl.agrosuper.to.GrupoItemAuditoria;
	import cl.agrosuper.to.ItemAuditoria;
	
	import flash.data.SQLConnection;
	import flash.data.SQLResult;
	import flash.data.SQLStatement;
	import flash.events.SQLEvent;
	
	import mx.collections.ArrayCollection;

	public class ItemAuditoriaDB
	{
		private var conn:SQLConnection;
		private var statement:SQLStatement;
		private var _callback:Function;
		
		public function ItemAuditoriaDB(conn:SQLConnection)
		{
			this.conn = conn;
			statement = new SQLStatement();
			statement.itemClass = ItemAuditoria;
			statement.sqlConnection = conn;
		}
		
		public function set callback(value:Function):void
		{
			_callback = value;
		}
		//-------------------------------------------------
		
		public function obtenerItemsGrupoAsync(idGrupo:int):void{
			statement.text = "SELECT ID id, DETALLE detalle " +
							 "FROM item_auditoria " +
							 "WHERE id_grupo = @idGrupo";
			statement.parameters["@idGrupo"] = idGrupo;
			statement.addEventListener(SQLEvent.RESULT, resultObtenerGruposItemPlantilla);
			statement.execute();
		}
		
		private function resultObtenerGruposItemPlantilla(event:SQLEvent):void{
			statement.removeEventListener(SQLEvent.RESULT, resultObtenerGruposItemPlantilla);
			statement.clearParameters();
			
			var result:SQLResult = statement.getResult();
			if (result != null && this._callback != null) {  
				this._callback(new ArrayCollection(result.data));
			}
		}
		
		public function obtenerItemsGrupo(idGrupo:int):ArrayCollection{
			statement.text = "SELECT ID id, DETALLE detalle " +
				"FROM item_auditoria " +
				"WHERE id_grupo = @idGrupo";
			statement.parameters["@idGrupo"] = idGrupo;
			statement.execute();
			statement.clearParameters();
			
			var result:SQLResult = statement.getResult();
			if (result != null) {  
				return new ArrayCollection(result.data);
			}
			
			return new ArrayCollection();
		}
		
		public function obtenerItemsGrupoAuditoria(idGrupo:int, idAuditoria:int):ArrayCollection{
			statement.text = "SELECT ia.id id, ia.detalle detalle, vi.resultado resultado, vi.justificacion justificacion, vi.evidencia evidencia " +
							 "FROM item_auditoria ia " +
							 "LEFT OUTER JOIN valor_item vi ON vi.id_item = ia.id " +
							 "WHERE ia.id_grupo = @idGrupo " +
							 "AND vi.id_auditoria = @idAuditoria";
			statement.parameters["@idGrupo"] = idGrupo;
			statement.parameters["@idAuditoria"] = idAuditoria;
			statement.execute();
			statement.clearParameters();
			
			var result:SQLResult = statement.getResult();
			if (result != null) {  
				return new ArrayCollection(result.data);
			}
			
			return new ArrayCollection();
		}
		
		public function guardarItemAuditoria(idAuditoria:int, itemAuditoria:ItemAuditoria):Boolean{
			statement.text = "INSERT INTO valor_item(id_item, id_auditoria, resultado, justificacion, evidencia) " +
							 "VALUES (@idItem, @idAuditoria, @resultado, @justificacion, @evidencia)";
			statement.parameters["@idItem"] = itemAuditoria.id;
			statement.parameters["@idAuditoria"] = idAuditoria;
			statement.parameters["@resultado"] = itemAuditoria.resultado;
			statement.parameters["@justificacion"] = itemAuditoria.justificacion;
			statement.parameters["@evidencia"] = itemAuditoria.evidencia;
			statement.execute();
			statement.clearParameters();
			
			var result:SQLResult = statement.getResult();
			if (result != null) {  
				return true;
			}
			
			return false;
		}
		
		public function eliminarItemsAuditoria(idAuditoria:int):Boolean{
			statement.text = "DELETE FROM valor_item WHERE id_auditoria = @idAuditoria";
			statement.parameters["@idAuditoria"] = idAuditoria;
			statement.execute();
			statement.clearParameters();
			
			var result:SQLResult = statement.getResult();
			if (result != null) {  
				return true;
			}
			
			return false;
		}
	}
}